package com.itheima52.mobilesafe.activity;

import com.itheima52.mobilesafe.R;

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.view.GestureDetector.OnGestureListener;
import android.widget.Toast;

/**
 * 设置引导也的父类,不需要在清单文件中注册,因为不需要在界面展示
 * 
 * @author ludaxu
 * 
 */
public abstract class BaseSetupActivity extends Activity {
	private GestureDetector mDetector;
	public SharedPreferences mPref;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);

		mPref = getSharedPreferences("config", MODE_PRIVATE);
		// 手势识别器
		mDetector = new GestureDetector(BaseSetupActivity.this,
				new OnGestureListener() {

					@Override
					public boolean onSingleTapUp(MotionEvent e) {
						// TODO Auto-generated method stub
						return false;
					}

					@Override
					public void onShowPress(MotionEvent e) {
						// TODO Auto-generated method stub

					}

					@Override
					public boolean onScroll(MotionEvent e1, MotionEvent e2,
							float distanceX, float distanceY) {
						// TODO Auto-generated method stub
						return false;
					}

					@Override
					public void onLongPress(MotionEvent e) {
						// TODO Auto-generated method stub

					}

					/**
					 * 监听手势滑动事件 e1 表示滑动的起点, e2 表示滑动的终点. velocityX x方向的滑动速度(水平速度)
					 * velocityY y方向的滑动速度(垂直速度)
					 */
					@Override
					public boolean onFling(MotionEvent e1, MotionEvent e2,
							float velocityX, float velocityY) {
						// 判断纵向滑动是否过大,过大的话,不许切换界面
						if (Math.abs(e2.getRawY() - e1.getRawY()) > 100) {
							Toast.makeText(BaseSetupActivity.this, "y方向滑动幅度过大", 0)
									.show();
							return true;
						}

						if (Math.abs(velocityX) < 100) {
							Toast.makeText(BaseSetupActivity.this, "滑动得太慢哦", 0)
									.show();
							return true;
						}

						// getRawX()基于整个屏幕,getX()基于父控件,比如基于button
						if (e2.getRawX() - e1.getRawX() > 200) {// 向右滑,大于200像素,显示上一页
							showPreviousPage();
						}
						if (e1.getRawX() - e2.getRawX() > 200) {// 向左滑,大于200像素,显示下一页
							showNextPage();
						}
						return false;
					}

					@Override
					public boolean onDown(MotionEvent e) {
						// TODO Auto-generated method stub
						return false;
					}
				});

	}

	@Override
	public boolean onTouchEvent(MotionEvent event) {
		mDetector.onTouchEvent(event);// 委托手势识别器处理触摸事件
		return super.onTouchEvent(event);
	}

	/**
	 * 展示上一页,声明为抽象方法,让子类必须实现. 有方法是抽象的,那么类也是抽象的
	 */
	public abstract void showPreviousPage();

	/**
	 * 展示下一页,声明为抽象方法,让子类必须实现. 有方法是抽象的,那么类也是抽象的
	 */
	public abstract void showNextPage();

	// 点击下一页按钮
	public void next(View view) {
		showNextPage();
	}

	// 点击上一页按钮
	public void previous(View view) {

		showPreviousPage();
	}

}
